    Help for Wave

Properties            Events            Frequently Asked Questions

Registration Information

Order Form

Getting Custom Controls Written

Licensing Information

Description

This control makes it easy for you to play and get information about WAV files.  Play WAV files in the background as your program performs other tasks; add recorded speech to your applications; put beeps, whistles, and laser sounds into your games.  Wave VBX makes all of this very straight-forward.  Set the Filename property and tell it to go.  That's it.

File Name

WAVE1.VBX, WAVE16.OCX, WAVE32.OCX

ActiveX / OCX Object Name

Mabry.WaveCtrl

ActiveX Compatility

VB 4.0 (32-bit) and 5.0

ActiveX Built With

Microsoft Visual C++ v4

ActiveX - Required DLLs

MFC40.DLL (October 6th, 1995 or later)

OLEPRO32.DLL  (October 6th, 1995 or later)

MSVCRT40.DLL  (September 29th, 1995 or later)

VBX Object Type

MabryWave

VBX Compatibility

VB 2.0, 3.0 and 4.0 (16-bit)

VBX Built With

Microsoft Visual C++ v1.5

Distribution Note    When you develop and distribute an application that uses this control, you should install the control file into the user's Windows SYSTEM directory.  The control file has version information built into it.  So, during installation, you should ensure that you are not overwriting a newer version.


Wave Properties

Properties that have special meaning for this control or that only apply to this control are marked with an asterisk (*).

*Action Property

Align Property

Enabled Property

*Exclusive Property

*FileLength Property

*Filename Property

Index Property

Left Property

*Loop Property

*LoopCount Property

Name Property

Parent Property

*PlayEnd Property

*PlayStart Property

*Position Property

*Status Property

Tag Property

Top Property


Wave Events

Events that have special meaning for this control or that only apply to this control are marked with an asterisk (*).

*PlayDone Event

*PlayLoop Event


Frequently Asked Questions

General Questions

Why do I get a "file not found" error when attempting to play a WAV file when the file is definitely there?

Can the Mabry Wave control play multiple .WAV's at the same time, in a similar way as the WaveMix.DLL?


FAQ - Why do I get a "file not found" error when attempting to play a WAV file when the file is definitely
Why do I get a "file not found" error when attempting to play a WAV file when the file is definitely there?

Frequently Asked Questions

A couple of things can cause this. If there is little available memory on the user's system, the WAV playing system can't open the file (part of "opening" it is loading it into memory).

This error can also be caused if the file to play is being used by another process.  For example, if using multiple Wave controls that may be accessing the same .WAV files, you must de-reference the file after playing it by setting the Filename property equal to "" in the PlayDone event.


FAQ - Can the Mabry Wave control play multiple .WAV's at the same time, in a similar way as the WaveMix.DL
Can the Mabry Wave control play multiple .WAV's at the same time, in a similar way as the WaveMix.DLL?

Frequently Asked Questions

Each wave control can only play one file at a time.  However, it is possible to have multiple controls playing multiple files simultaneously by setting the Exclusive property to False.  This may have undesirable consequences as the controls contend for the sound drivers.


Registration Information

CREDITS

Wave was written by James Shields.

CONTACT INFORMATION

Orders, inquiries, technical support, questions, comments, etc. can be sent to mabry@mabry.com on the Internet.  Our mailing address/contact information is:

Mabry Software, Inc.

Post Office Box 31926

Seattle, WA  98103-1926

Sales: 1-800-99-MABRY (U.S. Only)

Voice: 206-634-1443

Fax: 206-632-0272 or 206-364-3196

Web: http://www.mabry.com

COST

The price of Wave (control only) is US$15 (US$20 for International orders).  The cost of Wave and the C/C++ source code (of the control itself) is US$40 (US$45 for International orders).

Prices are subject to change without notice.

DELIVERY METHODS

We can ship this software to you via air mail and/or e-mail.

Air Mail - you will receive disks, a printed manual, and printed receipt if you choose this delivery method.  The costs are:

US$5.00 	US Priority Mail

US$10.00 	AirBorne Express 2nd Day (US deliveries only)

US$15.00 	AirBorne Express Overnight (US deliveries only)

US$45.00 	International AirBorne Express.

E-Mail - We can ship this package to you via e-mail.  You need to have an e-mail account that can accept large file attachments (which includes CompuServe, AOL, and most Internet providers).  If you choose this option, please note: a printed manual is not included.  We will, however, e-mail a receipt to you.

Be sure to include your full mailing address with your order.  Sometimes (on the Internet) the package cannot be e-mailed, so we are forced to send it through the normal mails.

CompuServe E-Mail - CompuServe members can use the software registration forum (GO SWREG) to register this package.  Wave's SWREG ID number is 4034.  The source code version's ID number is 4035.  PLEASE NOTE: When you order through SWREG, we send the registered package to your CompuServe account (not your Internet or AOL account) within a few hours.

ORDER / PAYMENT METHODS

You can order this software by phone, fax, e-mail, mail.  For your convenience, an order form has been provided that you can print out directly from this help file.

Please note that orders must include all information that is requested on our order form.   Your shipment WILL BE DELAYED if we have to contact you for additional information (such as phone number, street address, etc.).

You can pay by credit card (VISA, MasterCard, American Express), check (U.S. dollars drawn on a U.S. bank), cash, International Money Order, International Postal Order, Purchase Order (established business entities only - terms net 30), or wire transfer.

WIRE TRANSFER INFORMATION

Here is the information you need regarding our account for a wire funds transfer:

Bank Name: 	SeaFirst - Stone Way Branch

Bank Address: 	3601 Stone Way North

Seattle, WA  98103

Bank Phone: 	206-585-4951

Account Name: 	Mabry Software, Inc.

Routing Number: 	12000024

Account Number: 	16311706

If you are paying with a wire transfer of funds, please add US$12.50 to your order.  This is the fee that SeaFirst Bank charges Mabry Software.  Also, please ADD ANY ADDITIONAL FEES THAT YOUR BANK MAY CHARGE for wire transfer service. If you are paying with a  wire transfer, we must have full payment deposited to our account before we can ship your order.

Copyright © 1994-1997 by Mabry Software, Inc.


Order Form
 Wave Order Form

Use the Print Topic... command from the File menu to print this order form.

Mail this 	Mabry Software, Inc.

form to: 	Post Office Box 31926

Seattle, WA  98103-1926

Phone: 206-634-1443

Fax: 206-632-0272 or 206-364-3196

Internet: mabry@mabry.com

Web: www.mabry.com

Where did you get this copy of Wave?

____________________________________________________________________

Name: 	____________________________________________________________________

Ship to: 	____________________________________________________________________

____________________________________________________________________

____________________________________________________________________

____________________________________________________________________

Phone: 	_________________________________________________________________

Fax: 	_________________________________________________________________

E-Mail: 	_________________________________________________________________

MC/VISA/AMEX: _________________________________________ exp. __________________

P.O. # (if any): 	____________________ Signature ____________________________________

qty ordered 	____ 	REGISTRATION
$15.00 ($20.00 international).  Check or money order in U.S. currency drawn on a U.S. bank.  Add $5.00 per order for shipping and handling.

qty ordered 	____ 	SOURCE CODE AND REGISTRATION
$40.00 ($45.00 international).  Check or money order in U.S. currency drawn on a U.S. bank.  Add $5.00 per order for shipping and handling.


Action Example

In this example, the program shows how to play a wave file.  It plays the file shown in the edit box.  You can pause and stop the file while playing using the buttons.  To try this example, paste the code into the Declarations section of a form that contains two labels, two text boxes, three command buttons, and a Wave control.  Press F5 and play with the buttons.

Option Explicit

Dim fChanged As Integer ' flag: has filename changed?

Sub Command1_Click ()
    ' make sure the filename is up to date
    SetFilename

    ' play the file
    Wave1.Action = 1
    EnableButtons
End Sub

Sub Command2_Click ()
    ' if the user wants to pause
    If Command2.Caption = "Pause" Then
        ' pause
        Wave1.Action = 2
    Else
        ' resume
        Wave1.Action = 3
    End If

    EnableButtons
End Sub

Sub Command3_Click ()
    ' stop playing
    Wave1.Action = 4

    ' update buttons
    EnableButtons
End Sub

Sub EnableButtons ()
    Select Case Wave1.Status
        Case 1: ' playing
            If Command2.Caption <> "Pause" Then
                Command2.Caption = "Pause"
            End If

            Command3.Enabled = True
            Command2.Enabled = True

        Case 2: ' paused
            If Command2.Caption <> "Resume" Then
                Command2.Caption = "Resume"
            End If

            Command3.Enabled = True
            Command2.Enabled = True

        Case 4: ' stopped
            If Command2.Caption <> "Pause" Then
                Command2.Caption = "Pause"
            End If

            Command3.Enabled = False
            Command2.Enabled = False
    End Select
End Sub

Sub SetFilename ()
    ' if the filename has changed, tell Wave VBX
    If fChanged Then
        ' changed no more
        fChanged = False
        Wave1.Filename = Text1

        ' set the file length field
        Text2 = Format(Wave1.FileLength / 1000, "0.000") & " seconds"
    End If
End Sub

Sub Text1_Change ()
    fChanged = True
End Sub

Sub Wave1_PlayDone ()
    EnableButtons
End Sub

Sub Form_Load ()
    ' set-up form and all of its controls
    Form1.BackColor = &H00C0C0C0&
    Form1.BorderStyle = 3  'Fixed Double
    Form1.Caption = "Wave VBX Action Sample"
    Form1.Height = 2955
    Form1.Width = 4215

    Text1.Height = 285
    Text1.Text = "C:\WINDOWS\RINGOUT.WAV"
    Text1.Width = 3615

    Text2.Height = 285
    Text2.Text = ""
    Text2.Width = 3615

    Command1.Caption = "Play"
    Command1.Height = 615
    Command1.Width = 1215

    Command2.Caption = "Pause"
    Command2.Height = 615
    Command2.Width = 1215

    Command3.Caption = "Stop"
    Command3.Height = 615
    Command3.Width = 1215

    Label1.BackColor = &H00C0C0C0
    Label1.Caption = "Filename:"
    Label1.Height = 255
    Label1.Width = 1935

    Label2.BackColor = &H00C0C0C0
    Label2.Caption = "File Length:"
    Label2.Height = 255
    Label2.Width = 2415

    fChanged = True
    EnableButtons
End Sub


Exclusive and Loop Properties Example

In this example, the program shows the effects of the Exclusive and Loop properties.  It plays the file shown in the edit box.  To try this example, paste the code into the Declarations section of a form that contains two labels, one text box, two command buttons, two check boxes, and a Wave control.  Press F5 and play with the buttons.

Option Explicit

Dim fChanged As Integer ' flag: has filename changed?

Sub Command1_Click ()
    ' make sure the filename is up to date
    SetFilename

    ' play the file
    Wave1.Action = 1
    EnableButtons
    Label2 = "Playing"
End Sub

Sub Command2_Click ()
    ' stop playing
    Wave1.Action = 4

    ' update buttons
    EnableButtons
End Sub

Sub Check1_Click ()
    Wave1.Exclusive = (Check1.Value <> 0)
End Sub

Sub Check2_Click ()
    Wave1.Loop = (Check2.Value <> 0)
End Sub

Sub EnableButtons ()
    ' set button status
    Select Case Wave1.Status
        Case 1: ' playing
            Command2.Enabled = True

        Case 4: ' stopped
            Command2.Enabled = False
    End Select
End Sub

Sub SetFilename ()
    ' if the filename has changed, tell Wave
    If fChanged Then
        ' changed no more
        fChanged = False
        Wave1.Filename = Text1
    End If
End Sub

Sub Text1_Change ()
    fChanged = True
End Sub

Sub Wave1_PlayDone ()
    EnableButtons
    Label2 = "Stopped"
End Sub

Sub Wave1_PlayLoop (LoopCount As Integer)
    Label2 = "Playing (" & LoopCount & " times)"
End Sub

Sub Form_Load ()
    Form1.BackColor = &H00C0C0C0&
    Form1.Caption = "Wave VBX Loop Sample"
    Form1.Height = 3390
    Form1.Width = 4215

    Check1.BackColor = &H00C0C0C0&
    Check1.Caption = "Exclusive Playing"
    Check1.Height = 255
    Check1.Width = 3615

    Check2.BackColor = &H00C0C0C0&
    Check2.Caption = "Repeated Playing (loop)"
    Check2.Height = 255
    Check2.Width = 3615

    Text1.Height = 285
    Text1.Text = "C:\WINDOWS\RINGIN.WAV"
    Text1.Width = 3615

    Command2.Caption = "Stop"
    Command2.Height = 615
    Command2.Width = 1815

    Command1.Caption = "Play"
    Command1.Height = 615
    Command1.Width = 1815

    Label2.Alignment = 2  'Center
    Label2.BackColor = &H00C0C0C0&
    Label2.Height = 255
    Label2.Width = 3615

    Label1.BackColor = &H00C0C0C0&
    Label1.Caption = "Filename:"
    Label1.Height = 255
    Label1.Width = 1935

    fChanged = True
    EnableButtons
End Sub


PlayStart and PlayEnd Properties Example

In this example, the program shows how to use the PlayStart and PlayEnd properties.  It plays the file shown in the edit box between the spots defined by the start and end edit boxes.  To try this example, paste the code into the Declarations section of a form that contains four labels, two command buttons, one timer, four text boxes, and a Wave control.  Press F5 and play with the buttons.

Option Explicit

Dim fChanged As Integer ' flag: has filename changed?

Sub Command1_Click ()
    ' make sure the filename is up to date
    SetFilename

    ' check for start field
    If Trim(Text2) <> "" Then
        Wave1.PlayStart = Val(Text2)
    Else
        Wave1.PlayStart = -1
    End If

    ' check for end field
    If Trim(Text3) <> "" Then
        Wave1.PlayEnd = Val(Text3)
    Else
        Wave1.PlayEnd = -1
    End If

    ' play the file
    Wave1.Action = 1
    EnableButtons
End Sub

Sub Command2_Click ()
    ' stop playing
    Wave1.Action = 4

    ' update buttons
    EnableButtons
End Sub

Sub EnableButtons ()
    Select Case Wave1.Status
        Case 1: ' playing
            Command2.Enabled = True

        Case 2: ' paused
            Command2.Enabled = True

        Case 4: ' stopped
            Command2.Enabled = False
    End Select
End Sub

Sub SetFilename ()
    ' if the filename has changed, tell Wave
    If fChanged Then
        ' changed no more
        fChanged = False
        Wave1.Filename = Text4
    End If
End Sub

Sub Timer1_Timer ()
    If Wave1.Position = -1 Then
        Text1 = ""
    Else
        Text1 = Format(Wave1.Position / 1000, "0.000") & " seconds"
    End If
End Sub

Sub Text4_Change ()
    fChanged = True
End Sub

Sub Wave1_PlayDone ()
    EnableButtons
End Sub

Sub Form_Load ()
    ' set-up form, make it look nice
    Form1.BackColor = &H00C0C0C0
    Form1.BorderStyle = 3  'Fixed Double
    Form1.Caption = "Wave VBX Start/End Sample"
    Form1.Height = 3540
    Form1.Width = 4215

    Label1.BackColor = &H00C0C0C0
    Label1.Caption = "Filename:"
    Label1.Height = 255
    Label1.Width = 1935

    Label2.BackColor = &H00C0C0C0
    Label2.Caption = "Start:"
    Label2.Height = 255
    Label2.Width = 1215

    Label3.BackColor = &H00C0C0C0
    Label3.Caption = "End:"
    Label3.Height = 255
    Label3.Width = 1215

    Label4.BackColor = &H00C0C0C0
    Label4.Caption = "Position:"
    Label4.Height = 255
    Label4.Width = 1215

    Command1.Caption = "Play"
    Command1.Height = 615
    Command1.Width = 1815

    Command2.Caption = "Stop"
    Command2.Height = 615
    Command2.Width = 1815

    Timer1.Interval = 50

    Text1.Height = 285
    Text1.Text = ""
    Text1.Width = 3615

    Text2.Height = 285
    Text2.Text = ""
    Text2.Width = 1695

    Text3.Height = 285
    Text3.Text = ""
    Text3.Width = 1695

    Text4.Height = 285
    Text4.Text = "C:\WINDOWS\RINGOUT.WAV"
    Text4.Width = 3615

    Wave1.Left = 3480
    Wave1.Top = 0

    fChanged = True
    EnableButtons
End Sub


Action Property See Also
See Also

Exclusive Property

Filename Property

Loop Property

PlayEnd Property

PlayStart Property

PlayDone Event

PlayLoop Event


Exclusive Property See Also
See Also

Action Property

Filename Property

Loop Property

PlayDone Event


FileLength Property See Also
See Also

Filename Property


Filename Property See Also
See Also

Action Property

Exclusive Property

FileLength Property

Loop Property

PlayDone Event

PlayLoop Event


Loop Property See Also
See Also

Action Property

Exclusive Property

Filename Property

LoopCount Property

PlayLoop Event


LoopCount Property See Also
See Also

Action Property

Exclusive Property

Filename Property

Loop Property

PlayLoop Event


PlayDone Event See Also
See Also

Action Property

Loop Property

PlayLoop Event


PlayEnd Property See Also
See Also

Action Property

FileLength Property

Filename Property

PlayStart Property


PlayLoop Event See Also
See Also

Action Property

Loop Property

LoopCount Property

PlayDone Event


PlayStart Property See Also
See Also

Action Property

FileLength Property

Filename Property

PlayEnd Property


Position Property See Also
See Also

Action Property

Filename Property


Status Property See Also
See Also

Action Property

Filename Property


Action Property

See Also            Action Example            Frequently Asked Questions

Description

Specifies what to do with the current WAV file.

Syntax

object.Action [= action ]

The syntax of the Action property has these parts:

Part	   	Description

object	A Wave control.

action	An integer that determines the command / method to execute.

Remarks

The Action property settings are:

Constant	   	Value	   	Description

wAPlay	1	Play file.  Plays the file currently selected by the Filename property.  If the Exclusive property is set to False, then nothing else happens while the file plays.

If the Exclusive property is False and the Loop property is True, the file plays over and over until another action is taken.  The PlayLoop event will fire everytime the file plays.

The PlayStart and PlayEnd properties determine what part of the file to play.

When the file finally stops playing, for whatever reason, the PlayDone event fires.

wAPause	2	Pause playing.  This action pauses the playback.  This only has an effect if the file is currently playing (in other words, if Status is equal to 1).

wAResume	3	Resume playing. This action restarts the playback.  This only has an effect if the file is currently paused (in other words, if Status is equal to 2).

wAStop	4	Stop playing. This action stops the current playback.  This has no effect if the file is already stopped.

This property is only available at run-time.

Data Type

Integer (enumerated)


Exclusive Property

See Also            Exclusive and Loop Properties Example            Frequently Asked Questions

Description

Determines whether the WAV file plays in the background.

Syntax

object.Exclusive [= boolean ]

The syntax of the Exclusive property has these parts:

Part	   	Description

object	A Wave control.

boolean	A boolean flag that determines if the WAV file plays in the background (False) or nothing else happens while the file plays (True).

Remarks

If this property is set to True, the WAV file plays exclusively.  This means that nothing else happens while the WAV file is playing.  You effectively give control to Wave until the file is done playing (when the PlayDone event fires).

If this property is set to False, the WAV file plays in the background.  When playing in the background, you can set the Loop property to True.  This will make the WAV file play over and over until told to stop.

Data Type

Integer (boolean)


FileLength Property

See Also            Action Example            Frequently Asked Questions

Description

Tells the length of the current WAV file.

Syntax

object.FileLength

The syntax of the FileLength property has these parts:

Part	   	Description

object	A Wave control.

Remarks

When there is a WAV file selected (see Filename), this property holds the length of that file (in milliseconds).

Data Type

Integer (long)


Filename Property

See Also            Action Example            Frequently Asked Questions

Description

Determines what file is played.

Syntax

object.Filename [= filename ]

The syntax of the Filename property has these parts:

Part	   	Description

object	A Wave control.

filename	A string expression that holds a full path and file name to a WAV file.

Remarks

This property determines what file is used.  If the file could not be found, a file not found error (7) is generated.  After a valid file is loaded, the FileLength property is set to the length of the file, in milliseconds.

Data Type

String


Loop Property

See Also            Exclusive and Loop Properties Example            Frequently Asked Questions

Description

Determines whether the WAV file automatically repeats.

Syntax

object.Loop [= boolean ]

The syntax of the Loop property has these parts:

Part	   	Description

object	A Wave control.

boolean	A boolean flag that determines if the WAV file repeats continuously.

Remarks

If this property is set to True, the WAV file plays repeatedly, until stopped by the program.  This only works when the Exclusive property is set to False.

Each time the file repeates, the LoopCount property is increased by one and the PlayLoop event is fired.

Data Type

Integer (boolean)


LoopCount Property

See Also            Exclusive and Loop Properties Example            Frequently Asked Questions

Description

Tells how many times a file has played (looping).

Syntax

object.LoopCount [= integer ]

The syntax of the LoopCount property has these parts:

Part	   	Description

object	A Wave control.

integer	An integer expression that represents the number of times a WAV file has played.

Remarks

This property holds the number of times a file has repeated playing (while looping, when the Loop property is True and the Exclusive property is False).  This property is initially set to zero (0) when the file first starts playing.

Each time the file loops, this property is increased by one.  Then, the PlayLoop event is fired.

Data Type

Integer


PlayDone Event

See Also            Exclusive and Loop Properties Example            Frequently Asked Questions

Description

Occurs when the file stops playing.

Syntax

Sub object_PlayDone([index As Integer])

The syntax of the PlayDone event has these parts:

Part	   	Description

object	A Wave control.

index	An integer that identifies a control if it's in a control array.

Remarks

This event fires when the current file stops playing (for whatever reason).


PlayEnd Property

See Also            PlayStart and PlayEnd Properties Example            Frequently Asked Questions

Description

Determines where in the WAV file to stop playing.

Syntax

object.PlayEnd [= endposition ]

The syntax of the PlayEnd property has these parts:

Part	   	Description

object	A Wave control.

endposition	A long integer that specifies where in the WAV file to stop playing.  Setting this to -1 will cause the WAV file to play to the end.

Remarks

This property determines where to stop playing the WAV file when the Play Action is executed.  This property must range from PlayStart to FileLength.  This property is in milliseconds.

If this property is set to -1, the WAV file is played up to its end.

Data Type

Integer (long)


PlayLoop Event

See Also            Exclusive and Loop Properties Example            Frequently Asked Questions

Description

Fires when a sound file loops (due to the Loop property).

Syntax

Sub object_PlayLoop([index As Integer,] loopcount As Integer)

The syntax of the PlayLoop event has these parts:

Part	   	Description

object	A Wave control.

index	An integer that identifies a control if it's in a control array.

loopcount	An integer that holds the number of times the current WAV file has played.

Remarks

This event fires when a sound file stops playing and loops back to the beginning (when the Loop propertyis set to True).  The only parameter to this routine, loopcount, holds the number of times the current file has played.


PlayStart Property

See Also            PlayStart and PlayEnd Properties Example            Frequently Asked Questions

Description

Determines where in the WAV file to start playing.

Syntax

object.PlayStart [= startposition ]

The syntax of the PlayStart property has these parts:

Part	   	Description

object	A Wave control.

startposition	A long integer that specifies where in the WAV file to start playing.  Setting this to -1 will cause the WAV file to start playing from the beginning.

Remarks

This property determines where to start playing the WAV file when the Play Action is executed.  This property must range from 0 to FileLength.  This property is in milliseconds.

If this property is set to -1, the WAV file starts playing at the beginning.

Data Type

Integer (long)


Position Property

See Also            PlayStart and PlayEnd Properties Example            Frequently Asked Questions

Description

Determines the current position in the WAV file.

Syntax

object.Position [= position ]

The syntax of the Position property has these parts:

Part	   	Description

object	A Wave control.

position	A long integer that specifies the current position of playing in the WAV file.

Remarks

This property determines the position of the playback poitner in the WAV file (Filename). This property is in milliseconds.

You can set this property.  But, if the file is playing when you set it, the playing stops.

Data Type

Integer (long)


Status Property

See Also            Exclusive and Loop Properties Example            Frequently Asked Questions

Description

Holds the current status of the control.

Syntax

object.Status

The syntax of the Status property has these parts:

Part	   	Description

object	A Wave control.

Remarks

This property can be one of the following values:

Value	   	Description

1	Currently playing a file (see Filename)

2	Paused

4	Stopped

This property is read-only and only available at run-time.

Data Type

Integer (enumerated)


Getting Custom Controls Written

If you or your organization would like to have custom controls written, you can contact us at the following:

Mabry Software, Inc.

Post Office Box 31926

Seattle, WA  98103-1926

Phone: 206-634-1443

Fax: 206-632-0272 or 206-364-3196

Internet: mabry@mabry.com

You can also contact Zane Thomas.  He can be reached at:

Zane Thomas

Post Office Box 121

Indianola, WA  98342

Internet: zane@mabry.com


Licensing Information

Legalese Version

Mabry Software grants a license to use the enclosed software to the original purchaser.  Copies may be made for back-up purposes only.  Copies made for any other purpose are expressly prohibited, and adherence to this requirement is the sole responsibility of the purchaser.

Customer written executable applications containing embedded Mabry products may be freely distributed, without royalty payments to Mabry Software, provided that such distributed Mabry product is bound into these applications in such a way so as to prohibit separate use in design mode, and that such Mabry product is distributed only in conjunction with the customers own software product.  The Mabry Software product may not be distributed by itself in any form.

Neither source code for Mabry Software products nor modified source code for Mabry Software products may be distributed under any circumstances, nor may you distribute .OBJ, .LIB, etc. files that contain our routines. This control may be used as a constituent control only if the compound control thus created is distributed with and as an integral part of an application.  Permission to use this control as a constituent control does not grant a right to distribute the license (LIC) file or any other file other than the control executable itself. This license may be transferred to a third party only if all existing copies of the software and its documentation are also transferred.

This product is licensed for use by only one developer at a time.  Mabry Software expressly prohibits installing this product on more than one computer if there is any chance that both copies will be used simultaneously.  This restriction also extends to installation on a network server, if more than one workstation will be accessing the product.  All developers working on a project which includes a Mabry Software product, even though not working directly with the Mabry product, are required to purchase a license for that Mabry product.

This software is provided as is.  Mabry Software makes no warranty, expressed or implied, with regard to the software.  All implied warranties, including the warranties of merchantability and fitness for a particular use, are hereby excluded.

MABRY SOFTWARE'S LIABILITY IS LIMITED TO THE PURCHASE PRICE.  Under no circumstances shall Mabry Software or the authors of this product be liable for any incidental or consequential damages, nor for any damages in excess of the original purchase price.

To be eligible for free technical support by telephone, the Internet, CompuServe, etc. and to ensure that you are notified of any future updates, please complete the enclosed registration card and return it to Mabry Software.

English Version

We require that you purchase one copy of a control per developer on a project.  If this is met, you may distribute the control with your application royalty free.  You may never distribute the LIC file.  You may not change the product in any way that removes or changes the requirement of a license file.

We encourage the use of our controls as constituent controls when the compound controls you create are an integral part of your application.  But we don't allow distribution of our controls as constituents of other controls when the compound control is not part of an application.  The reason we need to have this restriction is that without it someone might decide to use our control as a constituent, add some trivial (or even non-trivial) enhancements and then sell the compound control.  Obviously there would be little difference between that and just plain reselling our control.

If you have purchased the source code, you may not re-distribute the source code either (nor may you copy it into your own project).  Mabry Software retains the copyright to the source code.

Your license is transferable.  The original purchaser of the product must make the transfer request.  Contact us for further information.

The sample versions of our products are intended for evaluation purposes only.  You may not use the sample version to develop completed applications.